Crate safina_select
source · [−]Expand description
This is a Rust library for awaiting multiple futures and getting the value of the first one that completes.
It is part of safina
, a safe async runtime.
Features
forbid(unsafe_code)
- Depends only on
std
- Good test coverage (96%)
- Works with
safina-executor
or any async executor
Limitations
- Can await 2-5 futures. Nest them if you need more.
Examples
use safina_async_test::async_test;
use safina_select::{select_ab, OptionAb};
let conn = match select_ab(make_new(addr.clone()), get_from_pool(addr.clone())).await {
OptionAb::A(result) => result?,
OptionAb::B(result) => result?,
};
// When both futures return the same type, you can use `take`:
let conn = select_ab(make_new(addr.clone()), get_from_pool(addr.clone())).await.take()?;
use safina_async_test::async_test;
use safina_select::{select_ab, OptionAb};
safina_timer::start_timer_thread();
let data = match select_ab(read_data(), safina_timer::sleep_until(deadline)).await {
OptionAb::A(result) => Ok(result?),
OptionAb::B(()) => Err("timeout"),
};
Documentation
TO DO - Alternatives
tokio::select
- very popular
- Fast
- internally incredibly complicated
- full of
unsafe
futures::select
- very popular
- proc macro, very complicated
- contains a little
unsafe
code
Changelog
- V0.1.4 - Update docs.
- v0.1.3 - Rename
OptionAB
toOptionAb
, etc. - v0.1.2 - Satisfy pedantic clippy
- v0.1.1 - Add badges to readme. Rename
safina
package tosafina-executor
. - v0.1.0 - First published version
TO DO
Release Process
- Edit
Cargo.toml
and bump version number. - Run
./release.sh
Structs
A future that polls two futures and returns the value from the one that completes first.
Enums
Functions
Awaits both futures and returns the value from the one that completes first.
Awaits the futures and returns the value from the one that completes first.
Awaits the futures and returns the value from the one that completes first.
Awaits the futures and returns the value from the one that completes first.